package diamond.day02;

/**
 * 使用同步机制将单例模式中的懒汉模式改写成线程安全的
 */
public class BankTest {
}

class Bank{
    private Bank(){}

    private static Bank instance = null;

//    public static synchronized Bank getInstance(){  // 同步方法解决线程安全问题，同步监视器默认为Bank.class
//        if(instance == null){
//            instance = new Bank();
//        }
//        return instance;
//    }

    public static Bank getInstance(){
        // 方式一：效率稍差
//        synchronized(Bank.class){   // 同步代码块的方式解决线程安全问题
//            if(instance == null){
//                instance = new Bank();
//            }
//            return instance;
//        }
        // 方式二：效率更高
        if(instance == null){
            synchronized(Bank.class){
                if(instance == null){
                    instance = new Bank();
                }
            }
        }
        return instance;
    }
}
